package com.huluobo.a2307douyindemo.utils

import android.util.Log
import net.sourceforge.pinyin4j.PinyinHelper
import java.lang.RuntimeException
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale

/**
 *  Created by LC on 2025/9/26.
 *  通用工具类
 */
object Utils {
    /**
     * @date 传入一个日期 Date类型
     * @format 传入一个日期格式 比如yyyy-MM-dd
     * @return 返回对应日期的割弃
     */
    fun format(date: Date, format: String): String {
        val dateFormat = SimpleDateFormat(format)
        return dateFormat.format(date)
    }

    /**
     * @date 传入一个日期 Long类型
     * @format 传入一个日期格式 比如yyyy-MM-dd
     * @return 返回对应日期的割弃
     */
    fun format(date: Long, format: String): String {
        val dateFormat = SimpleDateFormat(format)
        return dateFormat.format(date)
    }

    /**
     * 字符串转换日期格式
     * 如果一个字符串是日期类型,可以转换为一个Date类型,如果不是日期格式,会转换为异常被抛出
     */
    fun parse(str: String, format: String): Date {
        val dateFormat = SimpleDateFormat(format)
        return try {
            dateFormat.parse(str)
        } catch (e: ParseException) {
            Log.e("TagA", "产生异常:不是正确的时间格式")
            throw RuntimeException(e)
        }
    }

    /**
     * 验证邮箱格式
     * [A-z0-9+_.-] 所有字母和数字加上4个符号
     * [A-z0-9.-] @符后面的 字符和数字加上2个符号
     * (.com|.cn) 取一个值 .com或者.cn
     * ^开头$结尾
     */
    fun isValidEmail(email: String): Boolean {
        val emailRegex = "^[A-z0-9+_.-]+@[A-z0-9.-]+(.com|.cn)$"
        return email.matches(emailRegex.toRegex())
    }

    /**
     * 验证是否为手机号
     * 1 手机首尾字符肯定是1
     * 3456789 第二位数字
     * [0-9]{9} 代表后9位数字为任意数字
     */
    fun isValidPhoneNumber(phoneNumber: String): Boolean {
        val phoneRegex = "^1[3456789][0-9]{9}$"
        return phoneNumber.matches(phoneRegex.toRegex())
    }

    /**
     * 判断是否为字母
     */
    fun isLetter(c: Char): Boolean {
        return Character.isLetter(c)
    }

    /**
     * 判断是否是中文
     * 0x4e00..0x9fa5 中文ASCII码区间
     */
    fun isChinese(c: Char): Boolean {
        return c.code in 0x4e00..0x9fa5
    }

    /**
     * 判断是中文还是字母
     * @return 1 为中文,2为字母,返回0为其他
     */
    fun checkChar(c: Char): Int {
        if (isChinese(c)) return 1
        return if (isLetter(c)) 2 else 0
    }

    /**
     * 通过PinYinHelper获取中文首字符
     */
    fun getFirstLetter(c: Char): String {
        return when (checkChar(c)) {
            1 -> {
                //将字符转换为汉语拼音的String  刘->liu
                val string: Array<String> = PinyinHelper.toHanyuPinyinStringArray(c)
                //转化为大写
                string[0].uppercase(Locale.getDefault())
            }
            //如果是英文,直接转换为大写
            2 -> c.toString().uppercase(Locale.getDefault())
            else -> "#"
        }
    }

}